目的:
- 查詢商品的最後成交價
- 查詢商品的最後漲幅
1.登入聊天室後,需要告訴遊客查詢規格
# chat/consumers.py
import json
from datetime import datetime
from asgiref.sync import async_to_sync
from channels.generic.websocket import WebsocketConsumer
from fugle_marketdata import RestClient
api_key = 'YOUR_API__KEY'
#
class ChatConsumer(WebsocketConsumer):
def connect(self):
self.room_name = self.scope["url_route"]["kwargs"]["room_name"]
self.room_group_name = f"chat_{self.room_name}"
client = RestClient(api_key=api_key)
self.stock = client.stock
# Join room group
async_to_sync(self.channel_layer.group_add)(
self.room_group_name, self.channel_name
)
self.accept()
message = f"""
歡迎來到 {self.room_name} 股票聊天室,
查詢商品成交價,請輸入 商品代碼 + .close, ex: 2330.close
查詢商品漲跌幅,請輸入 商品代碼 + .changePercent, ex: 2330.changePercent
"""
async_to_sync(self.channel_layer.group_send)(
self.room_group_name, {"type": "chat.message", "message": message}
)
def disconnect(self, close_code):
# Leave room group
async_to_sync(self.channel_layer.group_discard)(
self.room_group_name, self.channel_name
)
# Receive message from WebSocket
def receive(self, text_data):
text_data_json = json.loads(text_data)
message = text_data_json["message"]
if message.find('.') > -1:
symbol, condition = message.split('.')
if symbol.isdigit() and len(symbol) == 4:
msg = f'您需入的查詢條件: {message}\n'
data = self.stock.intraday.quote(symbol=symbol)
if condition == 'close':
msg += f'日期:{data["date"]}\t 成交價格: {data["closePrice"]}\t 成交時間: {datetime.fromtimestamp(data["closeTime"] / 10**6)}'
elif condition == 'changePercent':
msg += f'日期:{data["date"]}\t 最後成交價漲跌幅: {data["changePercent"]}\t 最後更新時間: {datetime.fromtimestamp(data["lastUpdated"] / 10**6)}'
else:
msg += '查詢失敗,請重新輸入條件'
message = msg
else:
message = '查詢失敗,請重新輸入條件'
else:
message = '查詢失敗,請重新輸入條件'
# Send message to room group
async_to_sync(self.channel_layer.group_send)(
self.room_group_name, {"type": "chat.message", "message": message}
)
# Receive message from room group
def chat_message(self, event):
message = event["message"]
# Send message to WebSocket
self.send(text_data=json.dumps({"message": message}))
預期
輸入 2330.close
輸入 0050.changePercent
如之前教學,在建立連接的時候做 api 連接動作,
在 receive 判斷書入的字串有無符合格式,有則繼續做查詢的動作
把查詢回來的資料組成 msg 傳遞給聊天室
如此便達到查詢商品行情之目的
盤中跟盤後的差異為: 盤中的更新時間會隨者時間變動,盤後查詢則為固定時間
透過本服務取得之行情資料僅供參考,成交值及成交量不含零股及鉅額交易,使用者依本資料交易發生交易損失需自行負責。
時報資訊與群馥科技對資料內容錯誤、更新延誤或傳輸中斷不負任何責任。您應對您所為之任何金融或投資決策自行負責。
使用者應遵守臺灣證券交易所股份有限公司交易資訊使用管理辦法、臺灣期貨交易所股份有限公司交易資訊使用管理辦法、財團法人中華民國證券櫃檯買賣中心有價證券交易資訊使用管理辦法、各資訊來源提供者所定之資訊使用相關規範及智慧財產權相關法令,如有盜接、轉接交易資訊,或以其他方式出售、出租、轉讓、再授權交易資訊,或將交易資訊另行取樣並編製指數、其他衍生性商品或將之傳送予第三人,應負違約及侵權之相關民、刑事責任。
使用者須遵守臺灣證券交易所「交易資訊使用管理辦法」等交易資訊管理相關規定,所有資訊以臺灣證券交易所公告資料為準。